In many computing systems, low level instruction code is used as an intermediary between the hardware components of the computing system and the operating software and other high level software executing on the computing system. In some computer systems, this low level instruction code is known as the Basic Input and Output System (“BIOS”). The BIOS provides a set of software routines that allow high level software to interact with the hardware components of the computing system using standard calls.
Because of limitations of the BIOS in many PC-compatible computers, a new specification for creating the firmware that is responsible for booting the computer and for intermediating the communication between the operating system and the hardware has been proposed. The new specification is called the Extensible Firmware Interface (“EFI”) specification and is available from INTEL CORPORATION. The EFI specification describes an interface between the operating system and the system firmware. In particular, the EFI specification defines the interface that platform firmware must implement and the interface that the operating system may use in booting. How the firmware implements the interface is left up to the manufacturer of the firmware. The EFI specification provides protocols for EFI drivers to communicate with each other, and the EFI core provides functions such as allocation of memory, creating events, setting the clock, and many others. This is accomplished through a formal and complete abstract specification of the software-visible interface presented to the operating system by the platform and the firmware.
Development of a BIOS or EFI firmware is a complicated and incredibly time consuming process. Historically, a BIOS firmware was developed as a single executable program. However, as the BIOS firmware became more complex, it became necessary to take steps to simplify the BIOS development process. One way in which this was done was by making the development of a BIOS firmware more modular. In particular, the core of the BIOS firmware was separated from a number of independent support modules. For instance, the BIOS firmware core was separated from the modules that provide support for particular vendor hardware. EFI by its very nature is a modular program.
In order for a BIOS or EFI firmware to utilize the services of the modules external to the core, it is necessary for the firmware to call initialization routines in each of the modules. To accomplish this, a dispatching function is created in the core that calls the initialization routines in each of the modules in a specific order. Typically, the dispatching function uses an explicit list of the initialization routines to be called. However, if the list of initialization routines changes, such as in the case of the addition or deletion of a routine to customize the firmware for a particular hardware configuration, the dispatching function must be manually modified to reflect the change. In the case of an extremely complex BIOS or EFI firmware that must be built many times to support a wide variety of hardware configurations, this can be an extremely frustrating and time consuming task for a firmware programmer.
It is with respect to these considerations and others that the various embodiments of the invention have been made.